package day20170418.random;

import java.util.Random;
import org.junit.Test;


public class PlayCards {
	
	/**
	 * 斗地主发牌程序测试
	 * @throws Exception
	 */
	@Test
	public void playCardsTest() throws Exception {
		playCards();
	}
	
	/**
	 * 斗地主发牌程序
	 */
	public void playCards(){
		//定义扑克牌中的4种花色
		String[] color = {"方块","红桃","梅花","黑桃"};
		//定义一副扑克牌
		String[] cards = new String[54];
		//牌的大小
		int count = 1;
		//赋值的下标
		int xb = 0;
		//次数
		int ci = 1;
		
		for(int index=0; index<color.length; index++){
			for(int i=xb; i<cards.length; i++){
				//次数等于13代表已经第一种花色赋值完了
				if(ci == 13){
					//让count等于1重新循环
					count = 1;
					//把13变成K
					cards[i] = color[index]+"K";
					//防止把上一个花色最后一个覆盖
					xb = i+1;
					//次数恢复初始值，继续判断下个花色
					ci = 1;
					break;
				}else{
					//如果次数是等于11的话
					if(ci == 11){
						//把11变成J
						cards[i] = color[index]+"J";
						//次数要加，否则下次跟这次一样
						ci++;
					//如果次数是等于12s的话
					}else if(ci == 12){
						//把12变成Q
						cards[i] = color[index]+"Q";
						//次数要加，否则下次跟这次一样
						ci++;
					}else{
						//把13变成Q
						cards[i] = color[index]+(count++);
						//次数要加，否则下次跟这次一样
						ci++;
					}
				}
				
			}
		}
		//数组最后两个就是null的，拿来装大王小王
		cards[cards.length-1] = "小王";
		cards[cards.length-2] = "大王";
		
		Random random = new Random();
		
		System.out.print("农民1：");
		farmers(cards, random);
		System.out.print("农民2：");
		farmers(cards, random);
		System.out.print("地主：");
		farmers(cards, random);
		
		System.out.print("底牌为：");
		for(int index=0; index<cards.length; index++){
			//判断不为空，否则拿不到最后3张牌
			if(cards[index] != null){
				System.out.print(cards[index]+" ");
			}
		}
	}
	
	/**
	 * 这是发牌的方法
	 * @param cards		需要发牌的数组
	 * @param random	随机数
	 */
	private void farmers(String[] cards, Random random) {
		//这是一个次数拿来统计发了多少张牌
		int count = 0;
		while(true){
			//如果发的牌不够17张，那就继续发
			if(count != 17){
				//拿到随机数，简单的意思就是数组的下标
				int firstFarmer = random.nextInt(cards.length);
				//随机数就是数组的下标，拿到的值不能为null
				if(cards[firstFarmer] != null){
					System.out.print(cards[firstFarmer]+" ");
					//拿完之后设为null，代表这张牌已经发出去了
					cards[firstFarmer] = null;
					//发一张牌加一次
					count++;
				}else{
					//这次随机数对应数组的值是null，所以结束本次循环，继续下次循环
					continue;
				}
			}else{
				//代表发完了17张牌
				break;
			}
		}
		System.out.println();
	}
}
